package com.hapzxb.thread.synchronizede.bank;

import java.util.Arrays;

public class Bank {

    private final double[] accounts;

    public Bank(int n, double initialBalance){
        accounts = new double[n];
        Arrays.fill(accounts, initialBalance);
    }

    public synchronized void transfer(int from, int to, double amount) throws InterruptedException {
        while (accounts[from] < amount) {
            wait();
        }
        System.out.print(Thread.currentThread().getName());

        accounts[from] -= amount;
        System.out.printf(" %10.2f from %d to %d" , amount , from, to);

        accounts[to] += amount;

        System.out.printf(" Total Balance: %10.2f%n",  getTotalBalance());

        notifyAll();
    }

    private synchronized double getTotalBalance() {
        double sum = 0;
        for (double a : accounts) {
            sum += a;
        }
        return sum;
    }

    public int site(){
        return accounts.length;
    }
}
